Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BalancerV3: SwapAdapter and Substreams #126

Open
wants to merge 9 commits into
base: main
Choose a base branch
from

Conversation

ignazio-bovo
Copy link
Collaborator

SSIA

Copy link

gitguardian bot commented Dec 19, 2024

⚠️ GitGuardian has uncovered 3 secrets following the scan of your pull request.

Please consider investigating the findings and remediating the incidents. Failure to do so may lead to compromising the associated services or software components.

🔎 Detected hardcoded secrets in your pull request
GitGuardian id GitGuardian status Secret Commit Filename
14904727 Triggered Generic High Entropy Secret 73aec62 evm/test/BalancerV3SwapAdapter.t.sol View secret
14904728 Triggered Generic High Entropy Secret 73aec62 evm/test/BalancerV3SwapAdapter.t.sol View secret
14904729 Triggered Generic High Entropy Secret 73aec62 evm/test/BalancerV3SwapAdapter.t.sol View secret
🛠 Guidelines to remediate hardcoded secrets
  1. Understand the implications of revoking this secret by investigating where it is used in your code.
  2. Replace and store your secrets safely. Learn here the best practices.
  3. Revoke and rotate these secrets.
  4. If possible, rewrite git history. Rewriting git history is not a trivial act. You might completely break other contributing developers' workflow and you risk accidentally deleting legitimate data.

To avoid such incidents in the future consider


🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.

substreams/ethereum-balancer-v2/substreams.yaml Outdated Show resolved Hide resolved
substreams/crates/tycho-substreams/src/lib.rs Outdated Show resolved Hide resolved
substreams/ethereum-sfrax/integration_test.tycho.yaml Outdated Show resolved Hide resolved
Comment on lines +8 to +11
initialized_accounts:
- "0xbA1333333333a1BA1108E8412f11850A5C319bA9"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this the vault contract? Could you please add a comment here describing why this is necessary?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added comment in 302d458

@ignazio-bovo ignazio-bovo force-pushed the feature/balancer-v3-adapter-and-substream branch from 45eebca to 957f4ed Compare February 4, 2025 15:11
@tvinagre tvinagre changed the title balancer v3 adapter and substream BalancerV3: SwapAdapter and Substreams Feb 5, 2025
@tvinagre tvinagre force-pushed the feature/balancer-v3-adapter-and-substream branch 4 times, most recently from db617f7 to 8dbc3cb Compare February 6, 2025 21:19
add_change_if_accounted(&mut reserves_of, change, token.as_slice());
}
}
if let Some(SendTo { token, .. }) = SendTo::match_and_decode(call) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What happens if in the same TX the user calls SendTo and then Settle? We'd keep the final value? Also, are you sure that these are the only OPs that can alter a vault's balance?

Copy link
Contributor

@tvinagre tvinagre Feb 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SendTo requires the vault to be unlocked. Doesn't it also require settle to be called in the end? If so, this call check would be redundant, but I'm not 100% sure it is a requirement

Copy link
Collaborator Author

@ignazio-bovo ignazio-bovo Feb 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

are you sure that these are the only OPs that can alter a vault's balance?

Yes there are only 3 instances in where the _reservesOf storage mapping is being set:

  • settle
  • sendTo
  • erc4626WrapOrUnwrapBuffer

Copy link
Collaborator Author

@ignazio-bovo ignazio-bovo Feb 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SendTo requires the vault to be unlocked. Doesn't it also require settle to be called in the end?
There are instances where settle and sendTo can be invoked in the same TX, this is the case with multi steps path in the BatchRouter.sol contract.
There are also instances where sendTo is invoked without a settle after (in the RemoveLiquidityHookfor example).

The observation made however is valid: In case the storage slot for token_addr is settled twice there will be 2 corresponding token_balance messages.
W should keep the latest and most updated value according to the call order of invokation in the tx. And I have updated the HashMap insertion logic to accomodate for that.

ignazio-bovo and others added 7 commits February 13, 2025 19:16
Vault contract tokenBalance message are set according to the vault
storage changes in the `_reserveOf` storage variable VaultStorage.sol
contract
This was the culprit that caused the failure in simulation since
balancer enforces the invariant that `token.balanceOf(vault_addr) == _reservesOf[token]`
@tvinagre tvinagre force-pushed the feature/balancer-v3-adapter-and-substream branch from 9c625cf to 6a49063 Compare February 13, 2025 22:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants